/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package negocio;

import dao.DAO;
import dao.exceptions.NonexistentEntityException;
import gui.UsuarioContainer;
import java.util.List;
import modelo.Lei;
import modelo.Usuario;

/**
 *
 * @author emersonmx
 */
public class NegocioCadastroUsuario implements Negocio {

  DAO dao;

  @Override
  public DAO getDAO() { return dao; }

  @Override
  public void setDAO(DAO dao) { this.dao = dao; }

  @Override
  public void inserir(Object o) {
    if(dao.contar() == 0) {
      dao.inserir(o);
    }
  }

  @Override
  public void alterar(Object o) throws NonexistentEntityException, Exception {
    UsuarioContainer uc = (UsuarioContainer) o;
    Usuario u = uc.getUsuario();
    if(u != null) {
      if(u.getNome().isEmpty() || u.getSenha().isEmpty() || u.getUsuario().isEmpty() ||
         uc.getNovaSenha().isEmpty() || uc.getRepetirNovaSenha().isEmpty()) {
        throw new Exception("Campos obrigatórios não foram preenchidos.");
      }

      Usuario uo = (Usuario) dao.pesquisar(u.getId());
      if(u.getSenha().equals(uo.getSenha())) {
        if (uc.getNovaSenha().equals(uc.getRepetirNovaSenha())) {
          u.setSenha(uc.getNovaSenha());
          dao.alterar(u);
        } else {
          throw new Exception("A nova senha não é igual a senha no campo repetir senha.");
        }
      } else {
        throw new Exception("A senha atual está incorreta. Não foi possível modificar o usuário.");
      }
    } else {
      throw new NonexistentEntityException("Ocorreu um erro desconhecido!O usuário não foi alterado.");
    }
  }

  @Override
  public void excluir(Long id) throws NonexistentEntityException {
    dao.excluir(id);
  }

  @Override
  public List pesquisar() {
    return dao.pesquisar();
  }

  @Override
  public List pesquisar(Object o) {
    return dao.pesquisar(o);
  }

  @Override
  public List pesquisar(int resultadosMaximo, int primeiroResultado) {
    return dao.pesquisar(resultadosMaximo, primeiroResultado);
  }

  @Override
  public List pesquisar(boolean tudo, int resultadosMaximo, int primeiroResultado) {
    return dao.pesquisar(tudo, resultadosMaximo, primeiroResultado);
  }

  @Override
  public Object pesquisar(Long id) {
    return dao.pesquisar(id);
  }

  @Override
  public int contar() {
    return dao.contar();
  }

  /**
   * Já viu ne? quem adicionou esse revogar na interface, não pensou que seria
   * usada tambem para controlar o usuario...
   * já ouviu falar em um usuario revogado? nem eu mermão nem eu o,o
   *
   * @param a alguma coisa que nem sei o que é
   * @return um bool dizendo se a lei foi revogada? O,o
   */
  @Override
  public boolean revogar(String a) {
    throw new UnsupportedOperationException("Not supported yet.");
  }

  @Override
  public boolean pesquisarObjetoExistente(Long id) {
    Lei l = (Lei)dao.pesquisar(id);
      if(l.getId() == null){
          return false;
      }else{
        return true;
      }
    }

  @Override
    public boolean numeroLeiUnica(String numeroLei) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

  public boolean existObject(Lei l) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

}
